home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Cream of the Crop 20
/
Cream of the Crop 20 (Terry Blount) (1996).iso
/
os2
/
cppdoc.zip
/
cppdoc.cmd
next >
Wrap
OS/2 REXX Batch file
|
1996-06-06
|
35KB
|
869 lines
/* --------------------------------------------------------------------------
* $RCSfile: cppdoc.cmd,v $
* $Revision: 1.0 $
* $Date: 1996/06/06 14:25:36 $
* $Author: Bablok $
* --------------------------------------------------------------------------
* Synopsis:
*
* Documentation-Generator for C++ programs.
*
* cppdoc.cmd and cppdoc.htm are Copyright (c) 1996 by Bernhard Bablok
* --------------------------------------------------------------------------
* History:
*
* $Log: cppdoc.cmd,v $
* Revision 1.0 1996/06/06 14:25:36 Bablok
* Initial revision
*
*
* -------------------------------------------------------------------------- */
PARSE ARG fileName indexFile
CALL prolog
CALL readFiles
CALL findClasses
CALL findMember
CALL printDoc
CALL updateIndexFile
RETURN 0
/* -------------------------------------------------------------------------- */
/* some utility functions, for performance reasons at the head of the file */
/* -------------------------------------------------------------------------- */
/* -------------------------------------------------------------------------- */
/* nextIdentifier: return position of next identifier and identifier */
/* of a given string */
/* -------------------------------------------------------------------------- */
nextIdentifier: PROCEDURE
PARSE ARG string, start
IF string = '' THEN
RETURN 0 ''
IF start = '' THEN
start = 1
IF start > LENGTH(string) THEN
RETURN 0 ''
string = SUBSTR(string,start)
first = VERIFY(string,'_abcdefghijklmnopqrstuvwxyz' ||,
'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789','M')
IF first = 0 THEN
RETURN 0 ''
string = SUBSTR(string,first)
len = VERIFY(string,'_abcdefghijklmnopqrstuvwxyz' ||,
'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789') - 1
IF len = -1 THEN
len = LENGTH(string)
ident = SUBSTR(string,1,len)
IF ident = 'operator' & POS('(',string,len+1) > 2 THEN
ident = SPACE(SUBSTR(string,1,POS('(',string,len+1)-1),0)
RETURN start+first-1 ident
/* -------------------------------------------------------------------------- */
/* lastIdentifier: return last (c++)-identifier in a given string */
/* (including ~ for destructor, expecting no bitwise NOT) */
/* -------------------------------------------------------------------------- */
lastIdentifier: PROCEDURE
PARSE ARG string, start
IF string = '' THEN
RETURN ''
IF start = '' THEN
start = LENGTH(string)
revString = REVERSE(STRIP(SUBSTR(string,1,start)))
first = VERIFY(revString,'~_abcdefghijklmnopqrstuvwxyz' ||,
'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789','M')
IF first = 0 THEN
RETURN ''
len = VERIFY(SUBSTR(revString,first),'~_abcdefghijklmnopqrstuvwxyz' ||,
'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789') - 1
IF len = -1 THEN
len = LENGTH(revString) - (first-1)
ident = REVERSE(SUBSTR(revString,first,len))
IF ident = 'operator' THEN DO
ident = STRIP(REVERSE(STRIP(SUBSTR(revString,1,len+first-1),'L','(')))
END /* IF ident = 'operator' THEN DO */
RETURN ident
/* -------------------------------------------------------------------------- */
/* findMatchingChar: find position of closing parenthesis, brace etc */
/* -------------------------------------------------------------------------- */
findMatchingChar: PROCEDURE
PARSE ARG string, start
cOpen = SUBSTR(string,start,1)
SELECT
WHEN cOpen = '(' THEN cClose = ')'
WHEN cOpen = '{' THEN cClose = '}'
WHEN cOpen = '[' THEN cClose = ']'
WHEN cOpen = '<' THEN cClose = '>'
WHEN cOpen = ')' THEN cClose = '('
WHEN cOpen = '}' THEN cClose = '{'
WHEN cOpen = ']' THEN cClose = '['
WHEN cOpen = '>' THEN cClose = '<'
OTHERWISE
RETURN 0
END /* SELECT */
IF POS(cOpen,')}]>') > 0 THEN DO
string = REVERSE(string)
start = LENGTH(string) - start + 1
END /* IF POS(cOpen,')}]>') > 0 THEN DO */
open = 1
next = 0
DO FOREVER
charPos = VERIFY(SUBSTR(string,start+next+1),cOpen||cClose,'M')
IF charPos = 0 THEN /* actually, this is an error */
RETURN 0
next = next + charPos
char = SUBSTR(string,start+next,1)
IF char = cOpen THEN
open = open + 1
ELSE
open = open - 1
IF open = 0 THEN DO
matchingPos = start + next
IF POS(cOpen,')}]>') > 0 THEN
matchingPos = LENGTH(string) - matchingPos + 1
RETURN matchingPos
END /* IF open = 0 THEN DO */
END /* DO FOREVER */
/* -------------------------------------------------------------------------- */
/* makeExternalRef: add anchor tag for external reference */
/* -------------------------------------------------------------------------- */
makeExternalRef: PROCEDURE EXPOSE externalRefs. className
PARSE ARG line
start = 1
CALL nextIdentifier line, start
PARSE VALUE RESULT WITH identPos ident
DO WHILE ident <> ''
IF externalRefs.ident <> '' & ident <> className THEN DO
ref = '<A HREF="'externalRefs.ident'">'ident'</A>'
head = SUBSTR(line,1,identPos-1)
tail = SUBSTR(line,identPos+LENGTH(ident))
line = head || ref || tail
identPos = identPos + LENGTH(externalRefs.ident) + 15
END /* IF externalRefs.ident <> '' & ident <> className THEN DO */
start = identPos + LENGTH(ident)
CALL nextIdentifier line, start
PARSE VALUE RESULT WITH identPos ident
END /* DO WHILE ident <> '' */
RETURN line
/* -------------------------------------------------------------------------- */
/* makeInternalRef: add anchor tag for internal reference */
/* -------------------------------------------------------------------------- */
makeInternalRef: PROCEDURE
PARSE ARG string, refToken, refAnchor
ref = '<A HREF="#'refAnchor'">'refToken'</A>'
PARSE VALUE string WITH head (refToken) tail
RETURN head || ref || tail
/* -------------------------------------------------------------------------- */
/* lastWord: return last word of given string */
/* -------------------------------------------------------------------------- */
lastWord: PROCEDURE
PARSE ARG string
RETURN WORD(string,WORDS(string))
/* -------------------------------------------------------------------------- */
/* count: Return count of a given character in a given string */
/* -------------------------------------------------------------------------- */
count: PROCEDURE
PARSE ARG c, string
start = 1
num = 0
DO FOREVER
col = POS(c,string,start)
IF col > 0 THEN DO
num = num + 1
start = col + 1
END /* IF col > 0 THEN DO */
ELSE
RETURN num
END /* DO FOREVER */
/* -------------------------------------------------------------------------- */
/* changestr: Change multiple occurences of a given string */
/* -------------------------------------------------------------------------- */
changestr: PROCEDURE
PARSE ARG string, tableo, tablei, start, delim, once
IF start = '' THEN
start = 1
IF delim = '' THEN
delim = ' '
IF once = '' THEN
once = 0
DO FOREVER
IF tablei = '' THEN
LEAVE
PARSE VALUE tablei WITH oldToken (delim) tablei
PARSE VALUE tableo WITH newToken (delim) tableo
DO FOREVER
IF POS(oldToken,string,start) = 0 THEN
LEAVE
PARSE VALUE SUBSTR(string,start) WITH head (oldToken) rest
IF start > 1 THEN
string = SUBSTR(string,1,start-1) || head || newToken || rest
ELSE
string = head || newToken || rest
IF once THEN